package de.khaled.diplom;

import java.util.HashMap;
import java.util.Iterator;

public class Kaeufer {
	private String name;
	private double kapital;
	private double restKapital;
	private HashMap<Gut, Double> nutzen = new HashMap<>();
	private HashMap<Gut, Double> relativNutzen = new HashMap<>();
	private double alpha;
	private double beta;
	private boolean selektiert;
	private double m1;
	private double m2;
	private int schicht = 0;
	private HashMap<Gut, Double> mProGut = new HashMap<>();
	private double mOut = 0.0;
	private boolean saturiert;
	private double sumAnfragen = 0.0;
	
	public Kaeufer(String name){
		this.name = name;
	}
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getKapital() {
		return this.kapital;
	}
	public void setKapital(double kapital) {
		this.kapital = kapital;
	}
	public double getRestKapital() {
		return this.restKapital;
	}
	public void setRestKapital(double restKapital) {
		this.restKapital = restKapital;
	}
	public HashMap<Gut, Double> getNutzen() {
		return this.nutzen;
	}
	
	public void setNutzen(HashMap<Gut, Double> nutzen) {
		this.nutzen = nutzen;
	}
	public HashMap<Gut, Double> getRelativNutzen() {
		return relativNutzen;
	}
	public void setRelativNutzen(HashMap<Gut, Double> relativNutzen) {
		this.relativNutzen = relativNutzen;
	}
	public double getAlpha() {
		return alpha;
	}
	public void setAlpha(double alpha) {
		this.alpha = alpha;
	}
	public double getBeta() {
		return beta;
	}
	public void setBeta(double beta) {
		this.beta = beta;
	}
	
	public void berechneAlpha(){
		this.setAlpha(0);
		Iterator<Gut> it = this.relativNutzen.keySet().iterator();
		while(it.hasNext()){
			Gut gut = it.next();
			double relative = this.relativNutzen.get(gut);
			if(relative > this.getAlpha()){
				this.setAlpha(relative);
			}
		}
	}
	public void berechneBeta(){
		this.setBeta(0);
    	Iterator<Gut> it = this.relativNutzen.keySet().iterator();
		while(it.hasNext()){
			Gut gut = it.next();
			double relative = this.relativNutzen.get(gut);
			if(relative < this.getAlpha()  &&  relative >this.getBeta()){
				this.setBeta(relative);
			}
		}
	}
	public void printRelativeNutzen(){
		Iterator<Gut> it = this.relativNutzen.keySet().iterator();
		while(it.hasNext()){
			Gut gut = it.next();
			System.out.println("Gut "+gut.getName()+" Relativenutzen "+this.relativNutzen.get(gut));
		}
	}
	
	public void printNutzen(){
		Iterator<Gut> it = this.nutzen.keySet().iterator();
		while(it.hasNext()){
			Gut gut = it.next();
			System.out.println("Gut "+gut.getName()+" Nutzen "+this.nutzen.get(gut));
		}
	}
	public void printKaeufer(){
		System.out.println("====================================================");
		System.out.println("Kaeufername : "+this.name);
		System.out.println("Kapital     : "+this.kapital);
		System.out.println("Restkapital     : "+this.restKapital);
		this.printNutzen();
		this.printRelativeNutzen();
		System.out.println("Alpha           : "+this.alpha);
		System.out.println("Beta            : "+this.beta);
		System.out.println("====================================================");
	}
	public boolean isSelektiert() {
		return selektiert;
	}
	public void setSelektiert(boolean selektiert) {
		this.selektiert = selektiert;
	}
	public double getM1() {
		return m1;
	}
	public void setM1(double m1) {
		this.m1 = m1;
	}
	public double getM2() {
		return m2;
	}
	public void setM2(double m2) {
		this.m2 = m2;
	}
	public int getSchicht() {
		return schicht;
	}
	public void setSchicht(int schicht) {
		this.schicht = schicht;
	}
	public HashMap<Gut, Double> getmProGut() {
		return mProGut;
	}
	public void setmProGut(HashMap<Gut, Double> mProGut) {
		this.mProGut = mProGut;
	}
	public double getmOut() {
		return mOut;
	}
	public void setmOut(double mOut) {
		this.mOut = mOut;
	}
	public boolean isSaturiert() {
		return saturiert;
	}
	public void setSaturiert(boolean saturiert) {
		this.saturiert = saturiert;
	}
	public double getSumAnfragen() {
		return sumAnfragen;
	}
	public void setSumAnfragen(double sum_anfragen) {
		this.sumAnfragen = sum_anfragen;
	}
}
